iT邦幫忙

2025 iThome 鐵人賽

DAY 3
2
DevOps

初探 LLM 可觀測性:打造可持續擴展的 AI 系統系列 第 3

【Day 3】傳統可觀測性與可觀測性 2.0:只是另一個 Buzzword?

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250917/20149562cGpAEVe34e.jpg

概述

天下分久必合,合久必分。軟體世界從不缺乏閃亮的新名詞,尤其在微服務與雲原生逐漸成為主流的這些年,可觀測性(Observability) 和 分佈式追蹤(Distributed Tracing) 等概念也隨之崛起。可觀測性三本柱 Metrics、Logs、Traces 更像是一句試圖將複雜理念簡化包裝的口號,背後則是各種開源社群與供應商角力的戰場。

然而,沒能第一時間搭上這股浪潮的人,就此被拋在後頭了嗎?當然不是。市場中總不乏後來居上的劇本。

「可觀測性 2.0」的出現,正是這場競爭演化的結果。它不再侷限於三本柱的框架,而是試圖從先前提到的系統整合、資料關聯、用戶體驗等角度,提出更全面的觀察方式來解決現有的痛點。這場從定義到實踐的重新出發,不只是技術進展,更展現了開源社群中不斷自我挑戰的精神。

接下來,就讓我們來深入了解可觀測性 2.0 背後的故事與核心理念。

可觀測性 1.0 與三本柱所面臨的挑戰

https://ithelp.ithome.com.tw/upload/images/20250917/20149562AqDvX2j2Ss.png

在可觀測性的主流語境中,「三大支柱」Metrics、Logs 與 Traces,經常被視為構成系統可觀測性的基礎架構。有時候人們還會加入「Events」,湊成一個聽起來頗為巧妙的縮寫:MELT(Metrics, Events, Logs, Traces)。然而,這些命名終究只是為了便於理解與行銷的分類方式,真正的問題並不是支柱的數量,而是這些支柱在高基數與高維度資料的世界中,是否仍然具有實際效能。

高基數與高維度

高基數意指資料中存在大量唯一值組合,使壓縮與儲存成本顯著上升,也讓查詢時需付出更高的計算成本。傳統平台多採取刪除、降維或資料分層方式來處理,甚至引入 AI 工具來篩選所謂的「有價值」訊號,但這樣的策略本質上仍然在放棄可觀測性承諾的完整性。若平台在分析前就已丟棄原始資料,任何後續洞察都建立在不完整的基礎上。

這讓我們回到了問題的原點:可觀測性其實一直都是關於系統輸出的處理問題。而最通用的輸出形式,就是廣義的結構化日誌事件(structured logs)。指標與追蹤,其實都可以從這些結構化資料中推導出來。這也是為什麼 OpenTelemetry 日益受到重視:它提供了一種語意一致的資料標準,可以讓事件資料具備足夠的上下文來生成指標、還原追蹤,並支持橫跨系統的查詢與關聯。

為了確保在高維度資料下實現高效能的分析,解決方案應該利用列式存儲(column-based),這是分析型資料庫(OLAP DB)的典型特徵,同時採用靈活的索引格式以支援具有不同維度的欄位。許多OLAP 功能非常適合日誌資料。例如,「寫一次,讀多次」的不可變方法可以確保日誌保持為一個安全且不可更改的真相來源,同時還能提高分析效能。

即時分析的可觀測性才是未來

這樣的轉變,意味著我們不再僅僅將日誌視為維運專用的低階資訊來源。帶有語意與結構化上下文的事件資料,在統一儲存架構中,能為整個組織提供橫跨功能部門的價值:行銷可分析使用者行為、風控能偵測異常交易、安全團隊得以進行威脅追蹤,資料科學與 AI 團隊也能基於長期累積的真實資料訓練模型。

如果仍然執著於以三本柱為中心的資料孤島式設計,企業將持續面對成本上升與可見性斷裂的雙重壓力。而真正的解法,則是一個以語意日誌為核心、支援高基數與高維度的分析型可觀測性平台,它能即時處理大量事件資料,保留原始真實性,同時支援橫向橫切查詢與跨部門共享。這將不只是可觀測性 2.0,更是資料驅動組織架構的底層基礎建設

OpenTelemetry 與 OLAP 資料庫的強大之處

https://ithelp.ithome.com.tw/upload/images/20250917/201495627F6nywU8Mt.png

這幾年在社群不斷推動下,OpenTelemetry 已逐漸成為可觀測性領域的共同語言。它透過統一的傳輸協議與資料結構定義,並結合社群提供的完整工具鏈,嘗試解決過去遙測資料規劃分散、難以整合的問題。這確實讓業界首次看見「跨平台、跨工具」的可能性,也為後續的分析與標準化奠定了基礎。

OpenTelemetry 半結構化資料模型

OpenTelemetry的資料模型中,幾乎每種遙測訊號都包含了半結構化的鍵值對欄位。這些是設計的關鍵:

  1. 資源屬性 (Resource Attributes): 描述產生遙測資料的實體(例如服務名稱 service.name、主機ID host.id、K8s Pod名稱 k8s.pod.name)。這組KV適用於從該資源發出的所有遙測資料。
  2. 屬性 (Attributes): 附加在單個遙測事件上的上下文資訊。
    • Trace Spans: 包含 http.method, db.statement, rpc.system 等描述該操作細節的屬性。
    • Logs: Log Record可以附加屬性,補充日誌訊息的上下文。
    • Metrics: 資料點 (Data Point) 可以附加屬性,用於區分不同的維度 (Dimension),例如 http.status_code, region。
  3. 日誌本體 (Log Body): 日誌的核心內容本身可以是一個簡單的字串,也可以是一個複雜的、結構化的物件(例如一個JSON Payload)。

以下是 JSON 格式的 OTLP Log 的簡潔範例,展示了分層資料模型:

{
    "resourceLogs": [{
      "resource": {
        "attributes": [{
            "key": "event.type",
            "value": { "stringValue": "test" }
          },{
          "key": "service.name",
          "value": { "stringValue": "example-service" }
        },{
            "key": "service.country",
            "value": { "stringValue": "test-resource" }
          }]
      },
      "scopeLogs": [{
        "scope": {},
        "logRecords": [{
          "timeUnixNano": "'$(date +%s)000000000'",
          "severityText": "INFO",
          "body": {
            "stringValue": "This is a test log message generated at '"$(date -u "+%Y-%m-%d %H:%M:%S UTC")"'"
          },
          "attributes": [{
            "key": "service.environment",
            "value": { "stringValue": "development" }
          },{
            "key": "service.country",
            "value": { "stringValue": "test" }
          },{
            "key": "kind",
            "value": { "stringValue": "test" }
          },{
            "key": "event.type",
            "value": { "stringValue": "test" }
          }]
        }]
      }]
    }]
  }

這種設計的哲學是:提供一個標準化的骨架,但允許使用者填充任意豐富的、高基數的上下文資訊。 這對於現代雲原生應用至關重要,因為你無法預先知道所有需要查詢的維度。

對 Column-Based OLAP 資料庫的技術優勢

直接將一個 JSON blob 或 Map 存入資料庫的單一欄位是低效的,因為它違背了行式儲存的初衷。然而,現代的 OLAP 資料庫和數據管線已經發展出專門的技術來高效地處理這種半結構化資料,而 OTel 的設計正好能發揮這些技術的最大優勢。

1. 動態列生成 (Dynamic Column Generation) 與 Schema-on-Write

這是最核心的優勢,OLAP 資料庫(如 ClickHouse, Druid, Honeycomb 等)擅長處理寬表,OTel 的屬性設計與此完美契合。

  • 工作流程:
    1. 當一筆帶有屬性 { "http.method": "GET", "customer.tier": "gold" } 的資料進入數據接收管道(如 OpenTelemetry Collector 或資料庫的 ingestion 服務)時。
    2. 管道會將這些 Key 攤平,動態地映射到資料庫的欄位 (column)。例如,它們會被存入名為 attributes.http.method 和 attributes.customer.tier 的欄位中。
    3. 如果 attributes.customer.tier 這個欄位之前不存在,OLAP資料庫會即時建立這個新欄位。
  • 技術優勢:
    • 解耦開發與維運: 開發者可以在程式碼中隨時增加新的屬性來豐富遙測資料,而無需通知DBA去手動 ALTER TABLE。資料庫會自動適應新的資料結構。
    • 查詢效能: 一旦屬性被轉換為獨立的欄位,OLAP資料庫就可以發揮其原生優勢。對 WHERE attributes.customer.tier = 'gold' 的過濾查詢只會讀取 attributes.customer.tier 這一個欄位的資料,速度極快,避免了掃描和解析巨大的 JSON blob。

2. 極致的編碼與壓縮效率

https://ithelp.ithome.com.tw/upload/images/20250917/20149562JM4LFCGCyf.png

Column-based 資料庫的壓縮能力依賴於單一欄位內資料的重複性和同質性,這裡我們以 DuckDB 的 Dictionary Encoding 設計就能一目了然,。OTel 的屬性設計極大地增強了這一點。

  • 範例: 考慮 http.method 這個屬性。在攤平為 attributes.http.method 欄位後,這個欄位中只會包含少數幾個值,如 'GET', 'POST', 'PUT' 等。
  • 技術優勢:
    • 高壓縮比: 對於這種低基數 (low-cardinality) 的字串欄位,行式資料庫可以使用字典編碼 (Dictionary Encoding) 和 RLE (Run-Length Encoding) 等技術實現驚人的壓縮比。資料庫只需儲存一次 'GET', 'POST' 等字串,後續的資料只需儲存一個極小的整數ID。
    • 降低儲存成本: 這直接轉化為更低的儲存成本,對於動輒TB、PB級的觀測性資料來說,這一點至關重要。

3. 為高基數 (High-Cardinality) 分析而生

現代系統的故障排查通常需要下鑽到非常具體的維度,例如 user_id, trace_id, request_id。這些都是高基數欄位。

  • 設計契合點: OTel 的屬性模型天然地鼓勵開發者將這些高基數的識別碼作為屬性值附加到遙測資料上。
  • 技術優勢:
    • 高效索引與查詢: 雖然基數很高,但當它成為一個獨立的欄位後,OLAP資料庫可以為其建立專門的索引(如倒排索引或 min/max 索引)。這使得針對單一用戶或單次請求的查詢(例如 WHERE trace_id = '...')能夠在海量資料中快速定位,而不是全表掃描。
    • 避免指標維度爆炸: 在傳統的指標系統中,將高基數的 Label 加入指標會導致時間序列的數量爆炸性增長。而 OTel 的設計允許你將高基數資訊作為屬性附加到指標上,後端的 OLAP 資料庫可以高效處理,而不會摧毀指標系統。

OTel Arrow Protocol 邁向端到端的 Column-Based 處理

https://ithelp.ithome.com.tw/upload/images/20250917/20149562jF5YNxzkwh.png

OpenTelemetry 的資料格式設計,特別是向 OTel Arrow Protocol 的演進,深刻地反映了對現代資料分析基礎設施的理解。透過採用行式(columnar)的資料模型,OTel Arrow 不僅解決了傳統列式(row-oriented)格式在傳輸和處理大規模遙測資料時的效能瓶頸,更透過 Apache Arrow 的技術優勢,實現了在 傳輸壓縮處理 整個管線上的效能躍升。這種設計大幅降低了網路頻寬需求、CPU 解析與記憶體消耗,並且能充分利用現代 CPU 的向量化運算能力,為建構高效能、低成本的現代觀測性平台奠定了堅實的技術基礎。

傳統 OTLP 的挑戰

OTLP 使用 Protobuf 將每筆遙測資料(如一個 span、一筆 log、一個 metric data point)序列化為獨立紀錄。這種 row-oriented 格式雖適合小批量資料,但在大規模遙測場景下會遇到:

  • 高 CPU/記憶體消耗:需要將 row-oriented 資料轉換成 columnar 格式才能進一步處理。
  • 壓縮效率不佳:不同型別欄位混合存放,限制了壓縮演算法效果。
  • 處理與查詢困難:Collector 在篩選或聚合時,需完整解析每筆紀錄,無法針對欄位高效操作。

OTel Arrow Protocol 的優勢

https://ithelp.ithome.com.tw/upload/images/20250917/201495621eVfyEG6HB.png

  1. 高效壓縮與傳輸:
    • 行式壓縮比更高:同類型資料(如 trace_id、timestamp)連續存放,可達成比 Protobuf 更好的壓縮,metrics 場景下頻寬需求可降 7 倍。[4]
    • 字典編碼 (Dictionary Encoding):對大量重複字串(如 attributes key/value)進行整數化,並僅傳遞字典增量,顯著減少資料量。
  2. 加速處理與降低資源消耗:
    • SIMD 向量化:Arrow 的記憶體排佈適合現代 CPU 的 AVX/SSE 指令,可在 Collector 等處理環節直接做向量化計算。
    • 減少 GC 與物件建立:Protobuf 為每筆資料建立物件,容易造成 GC 壓力;Arrow 則直接操作連續記憶體區塊,顯著降低 CPU 與記憶體使用率。
  3. 多變量時間序列優化:
    • 共享屬性(如主機名、IP)與時間戳僅儲存一次,不再在每筆資料重複出現。這種緊湊結構既提升壓縮率,也讓時序分析查詢更快。
  4. 生態整合:
    • Apache Arrow 已是大數據與資料科學領域的通用格式,與 DataFusion、DuckDB、Parquet、Pandas、Spark 等工具緊密結合。OTel Arrow 讓 OpenTelemetry 可以直接利用這些生態系統,輕鬆進行資料湖或離線分析。

若最終流入 columnar OLAP 資料庫(如 ClickHouse、Druid、BigQuery),還能進一步受益:

  • 批量寫入更快:Arrow 本身就是 columnar 批次,可減少 row → column 轉換開銷。
  • 壓縮優化延續:Collector 階段的 dictionary/delta 編碼可與 OLAP 壓縮互補。
  • 管線一致性:從 Collector → Arrow 批次 → OLAP,保持 columnar 流程,整體效能與穩定性更佳。

https://ithelp.ithome.com.tw/upload/images/20250917/20149562Arc2SSsU7W.png

結論

講了這麼多,其實核心就一句話:可觀測性不只是三本柱

在高基數、高維度的世界裡,如果還把 Metrics、Logs、Traces 拆開來看,最後只會被資料成本跟維運壓得喘不過氣。

真正的方向,是把所有東西都回歸到 結構化事件,讓它們在一個統一的平台裡發揮價值。OpenTelemetry 幫我們定義了語言,OLAP 資料庫給了我們高速引擎,而 Arrow 協議則是那個把傳輸、壓縮、處理串起來的快車道。

所以你會發現,當這些元素湊在一起時,觀測性不再只是工程師的專利,而是能被行銷、安全、風控、AI 團隊一起用的資料基礎建設。這就是我眼中的 可觀測性 2.0 ,不只是通靈工具,而是一個讓組織運作更透明有信心的利器。


References:


上一篇
【Day 2】可觀測性與監控是什麼?
下一篇
【Day 4】可觀測性2.0的明日之星 - ClickHouse
系列文
初探 LLM 可觀測性:打造可持續擴展的 AI 系統4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言